// 流程控制语句
package main

// func main() {
// go中没有三目运算符！！！

// 1. if
/*
	a := true
	b := false
	if a { // 不用写括号
		fmt.Println("a")
	} else if b {
		fmt.Println("b")
	} else {
		fmt.Println("c")
	}
	// 另一种写法
	if age := 10; age > 5 { // 此时这个age 是一个局部的，局部于if及后面的else if、else
		fmt.Println("age > 5")
	}
	// if 几点注意：1. {}不能省略，只有一句也不行  2. { 必须紧挨着条件，不能另起一行
*/

// 2. for: for 初始语句;条件表达式;结束语句 {}
/*
	// for i := 1; i <= 10; i++ {
	// 	fmt.Printf("%v ", i)
	// }

	// i := 1 // 初始语句和结束语句都可以分离出来
	// for i <= 10 {
	// 	fmt.Printf("%v ", i+10)
	// 	i++
	// }

	// 死循环可以这样写：
	// i := 1
	// for {
	// 	if i > 10 {
	// 		break
	// 	}
	// 	fmt.Printf("%v ", i+20)
	// 	i++
	// }
*/

// 3. for range 遍历数组、切片、字符串、map 及 通道(channel) 规律：1. 数组、切片、字符串返回索引和值 2. map返回键和值 3. 通道返回通道内的值
/*
	// str := "hello world, 你好 世界."
	// for idx, value := range str {
	// 	fmt.Printf("%d, %c\n", idx, value)
	// }
	// var arr = []string{"a", "b", "c"}
	// for idx, item := range arr {
	// 	fmt.Printf("%d, %s\n", idx, item)
	// }
*/

// 4. switch
/*
	str := 'A'
	switch str {
	case 'a', 'A': // case可以有多个值
		fmt.Println(1)
		// break // 可以省略
	case 'b':
		fmt.Println(2)
	default:
		fmt.Println(0)
	}
	// num := 2
	// switch num {
	// case 1, 3, 5, 7, 9:
	// 	fmt.Println("奇数")
	// default:
	// 	fmt.Println("偶数")
	// }
	// switch 的穿透 fallthrough
	num := 5
	switch { // 不写，就可以在里面进行判断
	case num < 10:
		fmt.Println("< 10")
		fallthrough // 正常只输出<10, 加上fallthrought可以继续判断。
	case num < 20:
		fmt.Println("< 20")
	case num < 30: // fallthrough只能穿一层。
		fmt.Println("< 30")
	default:
		fmt.Println("else")
	}
*/

// 5. break、continue、goto
// 没啥好说的，和C、Python都差不多。
// }
